package com.heima.search.interceptor;

import com.heima.model.user.pojos.ApUser;
import com.heima.model.wemedia.pojos.WmUser;
import com.heima.utils.thread.AppThreadLocalUtil;
import com.heima.utils.thread.WmThreadLocalUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Optional;

@Slf4j
public class AppTokenInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		//从 HTTP 请求的头部获取名为 userId 的信息
		String userId = request.getHeader("userId");
		//使用 Optional 来包装 userId，以便更安全地处理可能为 null 的情况
		Optional<String> optional = Optional.ofNullable(userId);
		//检查 userId 是否存在（即是否不为 null），存在则继续执行以下逻辑
		if (optional.isPresent()) {
			//把用户id存入threadloacl中
			ApUser apUser = new ApUser();
			apUser.setId(Integer.valueOf(userId));
			AppThreadLocalUtil.setUser(apUser);
			// 记录日志信息，表明用户信息已成功存入线程的 ThreadLocal 中,多用于调试
			log.info("wmTokenFilter设置用户信息到threadlocal中...");
		}

		return true;
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		//使用 WmThreadLocalUtil 工具类，清理当前线程的 ThreadLocal，以便释放资源
		AppThreadLocalUtil.clear();
	}
}
